package com.seatch.msgateway;

import com.seatch.msgateway.config.AppNacosConfigParams;
import lombok.Data;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.StringUtils;

import java.util.Properties;


@Data
public class TestApplication extends SpringApplication {

    private static AppNacosConfigParams appNacosConfigParams;

    public TestApplication(Class<?>... primarySources) {
        super((ResourceLoader)null, primarySources);
    }

    public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
        return (new TestApplication(primarySources)).run(args);
    }

    public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
        return run(new Class[]{primarySource}, args);
    }

    public static ConfigurableApplicationContext run(AppNacosConfigParams params, Class<?> primarySource, String... args) {
        appNacosConfigParams = params;
        return run(new Class[]{primarySource}, args);
    }

    // @Override
//    private static   AppNacosConfigParams  appNacosConfigParams;
//
//    public static void configure(AppNacosConfigParams params) {
//        appNacosConfigParams = params;
//    }

//    public static ConfigurableApplicationContext run(AppNacosConfigParams configParams, Class<?> primarySource, String... args) {
//        System.out.println("before run application ");
//
//        // nacos.server.port
//        System.setProperty("nacos.server.port", "9999");
////        System.setProperty("spring.cloud.nacos.config.server-addr",  "127.0.0.1:9999");
////        System.setProperty("spring.cloud.nacos.discovery.server-addr",  "127.0.0.1:9999");
//
//        if (!StringUtils.isEmpty(configParams.getConfigServerAddress())) {
//            System.setProperty(AppNacosConfigParams.keyOfConfigServerAddress, configParams.getConfigServerAddress());
//        }
//
//        if (StringUtils.isEmpty(configParams.getDiscoveryServerAddress())) {
//            System.setProperty(AppNacosConfigParams.keyOfDiscoveryServerAddress, configParams.getDiscoveryServerAddress());
//        }
//
//        return TestApplication.run(new Class[]{primarySource}, args);
//
//        // return run(new Class[]{primarySource}, args);
//    }
//
//
//    public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
//        return ((TestApplication)new SpringApplication(primarySources)).run(args);
//    }


    @Override
    public ConfigurableApplicationContext run(String... args) {
        //
        System.out.println("before run application ");

        Properties properties = System.getProperties();
        System.setProperty("spring.cloud.nacos.config.server-addr", "127.0.0.1:9999");
        System.setProperty("spring.cloud.nacos.discovery.server-addr", "127.0.0.1:9999");
        System.setProperty("nacos.server.port", "9999");
//        if(appNacosConfigParams!=null &&!StringUtils.isEmpty(appNacosConfigParams.getConfigServerAddress()))
//        {
//            System.setProperty("spring.cloud.nacos.config.server-addr",  "127.0.0.1:9999");
//            System.setProperty("spring.cloud.nacos.discovery.server-addr",  "127.0.0.1:9999");
//        }
        // nacos.server.port


//        if (!StringUtils.isEmpty(configParams.getConfigServerAddress())) {
//            System.setProperty(AppNacosConfigParams.keyOfConfigServerAddress, configParams.getConfigServerAddress());
//        }
//
//        if (StringUtils.isEmpty(configParams.getDiscoveryServerAddress())) {
//            System.setProperty(AppNacosConfigParams.keyOfDiscoveryServerAddress, configParams.getDiscoveryServerAddress());
//        }

        return super.run(args);
    }

//    @Data
//    public class AppNacosConfigParams
//    {
//        public static final String keyOfConfigServerAddress ="spring.cloud.nacos.config.server-addr";
//        public static final String keyOfDiscoveryServerAddress ="spring.cloud.nacos.discovery.server-addr";
//        private String configServerAddress;
//        private String discoveryServerAddress;
//    }

//    public ConfigurableApplicationContext run()

}
